import 'package:enjoy_plus_hm/store/counter.dart';
import 'package:enjoy_plus_hm/utils/http.dart';
import 'package:enjoy_plus_hm/utils/toast.dart';
import 'package:enjoy_plus_hm/utils/token.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import '../../utils/eventBus.dart';

class MinePage extends StatefulWidget {
  MinePage({super.key, required this.currentIndex});
  // 定义参数 接收
  int currentIndex;
  @override
  State<MinePage> createState() => _MinePageState();
}

class _MinePageState extends State<MinePage> {
  // 菜单数据
  final List menuList = [
    {
      "title": "我的房屋",
      "icon": "assets/images/house_profile_icon@2x.png",
    },
    {
      "title": "我的报修",
      "icon": "assets/images/repair_profile_icon@2x.png",
    },
    {
      "title": "访客记录",
      "icon": "assets/images/visitor_profile_icon@2x.png",
    }
  ];
  // 个人中心数据
  Map userInfo = {
    "id": "",
    "avatar": null,
    "nickName": null,
  };

  /**
   * 获取需要token的接口数据
   */
  void getTokenData() async {
    // 获取需要token的接口数据
    var res = await MyHttp.get('/room');
    // print(res);
  }

  /**
   * 获取用户信息
   */
  void getUserInfo() async {
    try {
      // 获取用户信息
      var res = await MyHttp.get('/userInfo');
      // print(res);
      if (res['code'] != 10000) {
        return ToastUtil.showError("获取用户信息失败");
      }
      // print('getUserInfo:$res');
      //{code: 10000, message: 操作成功, data: {avatar: null, id: 7167282212786176, nickName: null}}
      // 获取用户信息成功
      setState(() {
        userInfo = res['data'];
      });
    } catch (e) {
      ToastUtil.showError("网络请求错误");
    }
  }

// 类似进入页面时，执行一次数据刷新
  @override
  void didUpdateWidget(covariant MinePage oldWidget) {
    // 该方法主要是组件重新构建时才会被调用的
    super.didUpdateWidget(oldWidget);
    if (widget.currentIndex == 1) {
      //获取个人中心的数据
      getUserInfo();
    }
  }

  @override
  void initState() {
    super.initState();
    // 在第一次时，注册监听获取个人中心的数据
    eventBus.on<RefreshMine>().listen((event) {
      getUserInfo();
    });
    // 在个人编辑页返回个人页面时，刷新个人中心数据
    eventBus.on<BackMineEvent>().listen((event) {
      ToastUtil.showSuccess("刷新成功");
      getUserInfo();
      // 方法二
      // setState(() {
      //   widget.currentIndex = 1;
      // });
    });
  }

  @override
  Widget build(BuildContext context) {
    // 使用counterModel
    final counterModel = Provider.of<CounterModel>(context);
    return Scaffold(
      backgroundColor: const Color.fromARGB(200, 85, 145, 175),
      appBar: AppBar(
        title: Text('我的${counterModel.counter}',
            style: TextStyle(color: Colors.white)),
        backgroundColor: const Color.fromARGB(0, 16, 139, 191),
        centerTitle: true,
      ),
      body: ListView(
        children: [
          // 个人信息
          Container(
              padding: const EdgeInsets.all(10),
              child: GestureDetector(
                  onTap: () {
                    // 传参userInfo
                    Navigator.pushNamed(context, '/profile',
                        arguments: userInfo);
                  },
                  child: Row(children: [
                    Row(children: [
                      // 头像
                      ClipRRect(
                          borderRadius: BorderRadius.circular(50.0),
                          // child: Image.asset('assets/images/avatar_1.jpg',
                          //     width: 50, height: 50)),
                          // 当userInfo为空时，显示默认头像,不为空时显示用户头像
                          child: userInfo['avatar'] != null
                              ? Image.network(
                                  userInfo['avatar'],
                                  width: 50,
                                  height: 50,
                                )
                              : Image.asset('assets/images/avatar_1.jpg',
                                  width: 50, height: 50)),
                      const SizedBox(width: 10),
                      Text(userInfo['nickName'] ?? '圣者无名',
                          style: TextStyle(fontSize: 16, color: Colors.white))
                    ]),

                    // 占满剩余空间
                    const Spacer(),
                    const Row(children: [
                      Text(
                        '去完善信息',
                        style: TextStyle(color: Colors.white),
                      ),
                      Icon(
                        Icons.arrow_forward_ios,
                        color: Colors.white,
                        size: 13,
                      )
                    ])
                  ]))),
          Container(
              // 样式
              padding: const EdgeInsets.all(15),
              margin: const EdgeInsets.only(
                  top: 20, left: 10, right: 10, bottom: 20),
              decoration: BoxDecoration(
                  color: Colors.white, borderRadius: BorderRadius.circular(10)),
              child: Column(
                  children: menuList.map((item) {
                return SizedBox(
                    height: 50,
                    child: GestureDetector(
                      onTap: () {
                        if (item['title'] == '我的房屋') {
                          Navigator.pushNamed(context, '/house_list');
                        }
                        // else if (item['title'] == '我的报修') {
                        //   Navigator.pushNamed(context, '/repair');
                        // } else if (item['title'] == '访客记录') {
                        //   Navigator.pushNamed(context, '/visitor');
                        // }
                      },
                      child: Row(children: [
                        Row(
                          children: [
                            Image.asset(
                              item['icon'],
                              width: 20,
                              height: 20,
                            ),
                            const SizedBox(
                              width: 10,
                            ),
                            Text(
                              item['title'],
                              style: const TextStyle(fontSize: 16),
                            )
                          ],
                        ),
                        const Spacer(),
                        const Icon(
                          Icons.arrow_forward_ios,
                          size: 12,
                          color: Colors.grey,
                        )
                      ]),
                    ));
              }).toList())),
          // 当用户点击此按钮时，将执行存储token的操作
          ElevatedButton(
            onPressed: () {
              // 调用TokenManager的saveToken方法，存储一个固定的token值
              TokenManager().saveToken('219218921982198219821');
            },
            child: const Text('存储token'),
          ),
          ElevatedButton(
            onPressed: () {
              // 调用TokenManager的saveToken方法，存储一个固定的token值
              getTokenData();
            },
            child: const Text('获取需要token的接口数据'),
          ),
          const SizedBox(height: 20),
          ElevatedButton(
              onPressed: () {
                TokenManager().removeToken();
              },
              child: const Text('删除token')),
          ElevatedButton(
              onPressed: () {
                counterModel.increment();
              },
              child: const Text('counter++'))
        ],
      ),
    );
  }
}
